#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include <list> 
using namespace std;

struct ListNode
{
    int val;
    string pos;
    string next;
};

ostream& operator<<(ostream& out, ListNode& x)
{
    out << x.pos << ' ' << x.val << ' ' << x.next;

    return out;
}


void elimate_repeat(list<ListNode>& lt, list<ListNode>& reject) // reject存放被删除的节点
{
	if (lt.empty())
		return ;
    int min, max;
    auto it = lt.begin();
    min = max = it->val;
    ++it;
    while (it != lt.end())
    {
        if (abs(it->val) > max)
        {
            max = it->val;
        }
        else if (abs(it->val) < min)
        {
            min = it->val;
        }
        else ;
        ++it;
    }
    int* record = new int[max - min + 1]{ 0 };
    it = lt.begin();
    while (it != lt.end())
    {
        int offset = abs(it->val) - min;
        if (record[offset] == 0)
        {
            // 当前it所指向的节点并未重复
            record[offset] = 1;
            ++it;
        }
        else
        {
            // 当前it所指向的节点重复了
            reject.push_back(*it);
            it = lt.erase(it);
        }
    }
}
void update_node(list<ListNode>& lt)
{
    if (lt.empty())
	{
		return;
	}
	else
	{
		auto cur = lt.begin(), next = lt.begin();
		++next;
		while (next != lt.end())
		{
			cur->next = next->pos;
			++cur;
			++next;
		}
		cur->next = "-1"; 
	}
}

void print(list<ListNode>& lt)
{
    for (auto& e : lt)
    {
        cout << e << endl;
    }
}

int main()
{
    int n;
    string cur;
    cin >> cur >> n;
    vector<ListNode> data;
    ListNode tmp;
    for (int i = 0; i < n; ++i)
    {
        cin >> tmp.pos >> tmp.val >> tmp.next;
        data.push_back(tmp);
    }
    list<ListNode> lt;
    while (!data.empty())
    {
        vector<ListNode>::iterator it = data.begin();
        while (it != data.end())
        {
            // 找地址为cur的节点
            if (it->pos == cur)
            {
                // 插入该节点到list中
                lt.push_back(*it);
                // 更新cur
                cur = it->next;
                // 删除data中的it节点
                data.erase(it);
                break;
            }
            // it并不是要找的节点
            // 更新
            ++it;
        }
    }

    // 链表构建完毕,开始去重

    list<ListNode> reject;
    elimate_repeat(lt, reject);

    // 链表去重完毕, 开始更新节点
    update_node(lt);
    update_node(reject);

    // 打印链表
    print(lt);
    print(reject);

    return 0;
}
